﻿using Newtonsoft.Json.Linq;
using System.Dynamic;

namespace StudentManager.API.BLL
{
    public class BllHelper
    {
        #region 获取Student的SQL查询条件
        /// <summary>
        /// 获取Student的SQL查询条件
        /// </summary>
        /// <param name="condition">学生表的字段条件</param>
        /// <returns>学生信息</returns>
        public static string? GetStudentSQLWhere(dynamic? condition)
        {
            // 初始化查询条件
            string? where = null;

            if (condition!=null) // 检查查询条件是否不为空
            {
                if (condition.Name != null) // 检查查询条件中是否包含 Name
                {
                    // 如果查询条件中包含 Name，则构建查询条件字符串
                    // 使用 LIKE 操作符进行模糊查询，匹配包含指定 Name 的记录
                    where = $"Name like '%'+@Name+'%'";
                }
                if (condition.StudentNo != null) // 检查查询条件中是否包含 StudentNo
                {
                    // 如果查询条件中已经包含其他条件，则在前面加上" and"
                    if (where != null) where += " and ";
                    // 如果查询条件中包含 StudentNo，则构建查询条件字符串
                    // 使用 LIKE 操作符进行模糊查询，匹配包含指定 StudentNo 的记录
                    where += $"StudentNo like '%'+@StudentNo+'%'";
                }
            }

            //返回根据条件生成的SQL查询条件
            return where;
        }
        #endregion

        #region 获取动态参数
        /// <summary>
        /// 将 JObject 类型的 JSON 对象转换为 ExpandoObject 动态对象。
        /// </summary>
        /// <param name="jo">待转换的 JObject 对象</param>
        /// <returns>返回转换后的动态对象</returns>
        public static ExpandoObject? ToParamObj(JObject? jo)
        {
            if (jo == null) return null;  // 如果传入的 JObject 为 null，返回 null

            var result = new ExpandoObject();  // 创建一个空的动态对象
            var dict = result as IDictionary<string, object>;  // 将动态对象转换为字典以便访问

            // 遍历 JObject 中的键值对，将其添加到字典中
            foreach (var kv in jo)
            {
                dict[kv.Key] = (string)kv.Value!;  // 假设 JSON 对象的值为字符串
            }

            return result;  // 返回最终转换的动态对象
        }
        #endregion
    }
}



